<!DOCTYPE html>
<!-- saved from url=(0127)https://docs.google.com/document/d/e/2PACX-1vTeWnJPdL3FuSDgdab-ZO1yRrdj8oIqRMUPYQubVm-oJWPEjLJm4djxv9Tnkn7nIdwBiWqo-HEFq7j8/pub -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>WebPerfWG - Triage call Sep 20th 2018 - minutes</title><link rel="shortcut icon" href="https://ssl.gstatic.com/docs/documents/images/kix-favicon7.ico"><meta name="referrer" content="strict-origin-when-cross-origin"><style type="text/css" nonce="">
      @import url("https://fonts.googleapis.com/css?family=Google+Sans");
      @import url("https://fonts.googleapis.com/css?family=Roboto");

      body {
        font-family: Roboto, arial, sans, sans-serif;
        margin: 0;
      }

      iframe {
        border: 0;
        frameborder: 0;
        height: 100%;
        width: 100%;
      }

      #header {
        align-items: center;
        background: white;
        border-bottom: 1px #ccc solid;
        display: flex;
        height: 60px;
        justify-content: space-between;
        position: fixed;
        top: 0;
        width: 100%;
        z-index: 100;
      }

      #header #title {
        font-family: 'Google Sans';
        font-size: large;
        margin: auto 0 auto 20px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        width: 70%;
      }

      #header #interval {
        margin: auto 25px auto 0;
        font-family: Roboto;
        font-size: small;;
      }

      #footer {
        background: #f0f0f0;
        border-bottom: 1px #ccc solid;
        bottom: 0;
        font-family: Roboto;
        font-size: small;
        padding: 10px 10px;
        position: fixed;
        text-align: center;
        width: 100%;
      }

      #contents {
        padding: 100px 20% 50px 20%;
      }

      @media only screen and (max-device-width: 800px) {
        #header {
          border-bottom-width: 5px;
          height: auto;
          display: block;
        }

        #header #title {
          font-size: 3em;
          margin: auto 0 auto 20px;
          width: 90%;
        }

        #header #interval {
          font-size: 1.5em;
          margin: 10px 0 auto 25px;
        }

        #contents {
          padding: 150px 5% 80px;
        }

        #footer {
          font-size: 2em;
        }
      }

      .dash {
        padding: 0 6px;
      }
    </style></head><body><div id="header"><div id="title">WebPerfWG - Triage call Sep 20th 2018 - minutes</div><div id="interval"><span></span></div></div><div id="contents"><style type="text/css">ol.lst-kix_8z54o4v75b2r-2.start{counter-reset:lst-ctn-kix_8z54o4v75b2r-2 0}.lst-kix_8z54o4v75b2r-3>li{counter-increment:lst-ctn-kix_8z54o4v75b2r-3}.lst-kix_8z54o4v75b2r-0>li{counter-increment:lst-ctn-kix_8z54o4v75b2r-0}ol.lst-kix_8z54o4v75b2r-8{list-style-type:none}ol.lst-kix_8z54o4v75b2r-4.start{counter-reset:lst-ctn-kix_8z54o4v75b2r-4 0}ol.lst-kix_8z54o4v75b2r-7{list-style-type:none}ol.lst-kix_8z54o4v75b2r-4{list-style-type:none}ol.lst-kix_8z54o4v75b2r-3{list-style-type:none}ol.lst-kix_8z54o4v75b2r-6{list-style-type:none}ol.lst-kix_8z54o4v75b2r-5{list-style-type:none}ol.lst-kix_8z54o4v75b2r-0{list-style-type:none}ol.lst-kix_8z54o4v75b2r-2{list-style-type:none}ol.lst-kix_8z54o4v75b2r-1{list-style-type:none}ol.lst-kix_8z54o4v75b2r-1.start{counter-reset:lst-ctn-kix_8z54o4v75b2r-1 0}ol.lst-kix_8z54o4v75b2r-6.start{counter-reset:lst-ctn-kix_8z54o4v75b2r-6 0}.lst-kix_8z54o4v75b2r-6>li{counter-increment:lst-ctn-kix_8z54o4v75b2r-6}.lst-kix_8z54o4v75b2r-1>li:before{content:"" counter(lst-ctn-kix_8z54o4v75b2r-1,lower-latin) ") "}.lst-kix_8z54o4v75b2r-2>li:before{content:"" counter(lst-ctn-kix_8z54o4v75b2r-2,lower-roman) ") "}ol.lst-kix_8z54o4v75b2r-3.start{counter-reset:lst-ctn-kix_8z54o4v75b2r-3 0}.lst-kix_8z54o4v75b2r-0>li:before{content:"" counter(lst-ctn-kix_8z54o4v75b2r-0,decimal) ") "}.lst-kix_8z54o4v75b2r-4>li:before{content:"(" counter(lst-ctn-kix_8z54o4v75b2r-4,lower-latin) ") "}.lst-kix_8z54o4v75b2r-5>li{counter-increment:lst-ctn-kix_8z54o4v75b2r-5}.lst-kix_8z54o4v75b2r-7>li{counter-increment:lst-ctn-kix_8z54o4v75b2r-7}ol.lst-kix_8z54o4v75b2r-8.start{counter-reset:lst-ctn-kix_8z54o4v75b2r-8 0}.lst-kix_8z54o4v75b2r-3>li:before{content:"(" counter(lst-ctn-kix_8z54o4v75b2r-3,decimal) ") "}li.li-bullet-0:before{margin-left:-18pt;white-space:nowrap;display:inline-block;min-width:18pt}.lst-kix_8z54o4v75b2r-2>li{counter-increment:lst-ctn-kix_8z54o4v75b2r-2}ol.lst-kix_8z54o4v75b2r-0.start{counter-reset:lst-ctn-kix_8z54o4v75b2r-0 0}ol.lst-kix_8z54o4v75b2r-5.start{counter-reset:lst-ctn-kix_8z54o4v75b2r-5 0}.lst-kix_8z54o4v75b2r-8>li:before{content:"" counter(lst-ctn-kix_8z54o4v75b2r-8,lower-roman) ". "}.lst-kix_8z54o4v75b2r-4>li{counter-increment:lst-ctn-kix_8z54o4v75b2r-4}ol.lst-kix_8z54o4v75b2r-7.start{counter-reset:lst-ctn-kix_8z54o4v75b2r-7 0}.lst-kix_8z54o4v75b2r-8>li{counter-increment:lst-ctn-kix_8z54o4v75b2r-8}.lst-kix_8z54o4v75b2r-5>li:before{content:"(" counter(lst-ctn-kix_8z54o4v75b2r-5,lower-roman) ") "}.lst-kix_8z54o4v75b2r-6>li:before{content:"" counter(lst-ctn-kix_8z54o4v75b2r-6,decimal) ". "}.lst-kix_8z54o4v75b2r-1>li{counter-increment:lst-ctn-kix_8z54o4v75b2r-1}.lst-kix_8z54o4v75b2r-7>li:before{content:"" counter(lst-ctn-kix_8z54o4v75b2r-7,lower-latin) ". "}ol{margin:0;padding:0}table td,table th{padding:0}.c0{margin-left:72pt;padding-top:0pt;padding-left:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c4{margin-left:108pt;padding-top:0pt;padding-left:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c5{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left;height:11pt}.c1{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c12{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:16pt;font-family:"Arial";font-style:normal}.c10{padding-top:18pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c11{color:#000000;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c8{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c7{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}.c14{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}.c3{padding:0;margin:0}.c6{color:inherit;text-decoration:inherit}.c9{margin-left:36pt;padding-left:0pt}.c2{font-weight:700}.c13{margin-left:72pt}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style><div class="c14"><p class="c8"><span class="c1"><b>Chair</b>: Yoav Weiss</span></p><p class="c8"><span class="c1"><b>Scribe</b>: Charlie Vazac</span></p><p class="c8"><span class="c1"><b>Participants</b>: Ryosuke Niwa, Nic Jansma, Charlie Vazac, Tim Dresser, Nicolás Peña, Panagiotis Astithas</span></p><p class="c5"><span class="c1"></span></p><p class="c8"><span>Start by setting up next call - </span><span class="c11 c2">Next meeting is October 2nd, 11a PST</span></p><p class="c5"><span class="c11 c2"></span></p><p class="c8"><span class="c1">New charter announced today, we need to rejoin the wg.</span></p><p class="c8"><span>Talk to your AC rep, AC rep needs to click thru the </span><span class="c7"><a class="c6" href="https://www.google.com/url?q=https://www.w3.org/2004/01/pp-impl/45211/join&amp;sa=D&amp;source=editors&amp;ust=1613255755311000&amp;usg=AOvVaw256VoYuRmYXhBvru9pr5Um">rejoining process</a></span><span class="c1">.</span></p><p class="c5"><span class="c1"></span></p><h2 class="c10" id="h.cjpdml4ix3a6"><span class="c12">Resource Timing</span></h2><ol class="c3 lst-kix_8z54o4v75b2r-0 start" start="1"><li class="c8 c9 li-bullet-0"><span class="c7"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/resource-timing/pull/163&amp;sa=D&amp;source=editors&amp;ust=1613255755312000&amp;usg=AOvVaw1ItsO7hBhZ3A3oIkJUv-5V">https://github.com/w3c/resource-timing/pull/163</a></span></li></ol><ol class="c3 lst-kix_8z54o4v75b2r-1 start" start="1"><li class="c0 li-bullet-0"><span class="c1">Theoretical potential for loss of entries versus more complex processing model</span></li><li class="c0 li-bullet-0"><span class="c1">In PR, Yoav specified fixed size of secondary buffer, meaning we might end up dropping entries on the table</span></li><li class="c0 li-bullet-0"><span class="c1">Webkit model will not drop entries, but it’s more complex</span></li></ol><ol class="c3 lst-kix_8z54o4v75b2r-2 start" start="1"><li class="c4 li-bullet-0"><span class="c1">Amount of entries is unbound between buffer full event and ultimate clearing or increasing of the buffer size</span></li></ol><ol class="c3 lst-kix_8z54o4v75b2r-1" start="4"><li class="c0 li-bullet-0"><span class="c1">Ryosuke points out that it’s no different in MO, IntersectionObsever - unlimited entries</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav points out that, with this pattern, the buffer could overflow to infinity </span></li><li class="c0 li-bullet-0"><span class="c1">Yoav argues that the processing model of Webkit is significantly more complex than what’s specified in the spec </span></li><li class="c0 li-bullet-0"><span class="c1">Yoav points out that this is a edge-case</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke wants a way to ensure that developer will not miss any entries</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav says that there is a bug in the spec today means we’ll always drop at least one entry</span></li><li class="c0 li-bullet-0"><span class="c1">Tim D. asked what is concern with complexity</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav is concerned about spec and impl. Complexity</span></li><li class="c0 li-bullet-0"><span>Ryosuke</span><span class="c1">&nbsp;says that current spec is un-implementable</span></li><li class="c0 li-bullet-0"><span class="c1"><b>Yoav</b>: do we want a simpler model with losing entries, or more complex one that doesn’t lose entries</span></li><li class="c0 li-bullet-0"><span class="c1">Tim D. should we see what the complex version of the spec would look like to see how bad it is?</span></li><li class="c0 li-bullet-0"><span class="c11 c2">Yoav agrees to do this work in next few weeks - ACTION ITEM</span></li><li class="c0 li-bullet-0"><span class="c1">Panagiotis does not have feedback on this - will not be at TPAC, likely no webperf folks will be there</span></li><li class="c0 li-bullet-0"><span class="c1">Tim D. points out that Harald said Moz. reps might be there</span></li></ol><ol class="c3 lst-kix_8z54o4v75b2r-0" start="2"><li class="c8 c9 li-bullet-0"><span class="c1">Untriaged issues</span></li><li class="c8 c9 li-bullet-0"><span class="c7"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/resource-timing/issues/164&amp;sa=D&amp;source=editors&amp;ust=1613255755313000&amp;usg=AOvVaw0aUI2IEclZ4vX__1od81sM">https://github.com/w3c/resource-timing/issues/164</a></span></li></ol><ol class="c3 lst-kix_8z54o4v75b2r-1 start" start="1"><li class="c0 li-bullet-0"><span class="c1">Devtools shows “queuing” and “stalled” for some requests, but we don’t show it in RT</span></li><li class="c0 li-bullet-0"><span class="c1">Those values are included in duration, so they are inferable</span></li><li class="c0 li-bullet-0"><span class="c1">This is mostly for h1, not h2</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - I’m not sure this is something we want to expose, and this would be most effective on h1 stacks, as there’s no queuing related to TCP connects in most impls. of h2, they are only queued in h1 when there are no connections available</span></li><li class="c0 li-bullet-0"><span class="c1">Nic - is this just about tcp queuing time? Yoav - yes</span></li><li class="c0 li-bullet-0"><span>Steve Souders </span><span class="c7"><a class="c6" href="https://www.google.com/url?q=https://www.stevesouders.com/blog/2014/11/25/serious-confusion-with-resource-timing/&amp;sa=D&amp;source=editors&amp;ust=1613255755314000&amp;usg=AOvVaw1QsH2bvj2faZFHl-tWFBMZ">posted</a></span><span class="c1">&nbsp;a few years back that the RT chunks are not additive to duration</span></li><li class="c0 li-bullet-0"><span class="c1">Nic - we see gaps between the chunks in RT data in the wild, browser quirks, stalls, boomerang does not expect the chunks to add up to duration</span></li><li class="c0 li-bullet-0"><span class="c1">Nic - we don’t try to account for ALL the time</span></li><li class="c0 li-bullet-0"><span class="c1">Nic - with cross origin resources, there is a gap in the data _somewhere_</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - because there are many queuing times, exposing them all night be messy, Nic agrees</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - and we can’t expose queuing time for cross origin resources without TAO</span></li><li class="c0 li-bullet-0"><span class="c11 c2">Nic to comment in github issue ACTION ITEM</span></li><li class="c0 li-bullet-0"><span class="c1">Nic - without queuing/blocking time, we don’t know if it was network time, or time spent waiting for the network (queuing)</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - we might need a clearer definition of queuing</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - for the screenshots between the browsers, blocking and queuing might not mean the same thing</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - time spent waiting for server should be after connect start</span></li><li class="c0 li-bullet-0"><span>Nic - boomerang calculates </span><span class="c2">blocking time</span><span>&nbsp;as </span><span class="c2">connect-end</span><span>&nbsp;to </span><span class="c2">request-start</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - what else would you get from queuing / blocking?</span></li><li class="c0 li-bullet-0"><span class="c1">Nic - if you don’t have TAO, you can’t know if the time was spent waiting for connection, or waiting on network</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - you shouldn’t/can’t know, security impl.</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - what the OP is trying to accomplish is available with arithmetic, does he/she need something else?</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - this is probably not something we want to pursue, unless we are missing something else</span></li><li class="c0 li-bullet-0"><span><b>Resolution</b>: Nic to comment in thread, check if our understanding matches, see if the arithmetic approach suits his/her needs</span></li></ol><ol class="c3 lst-kix_8z54o4v75b2r-0" start="4"><li class="c8 c9 li-bullet-0"><span class="c7"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/resource-timing/issues/161&amp;sa=D&amp;source=editors&amp;ust=1613255755315000&amp;usg=AOvVaw2LJjKNVkffmtSunHYaCrqb">https://github.com/w3c/resource-timing/issues/161</a></span><span class="c1">&nbsp;(from Nicolás - @npm1)</span></li></ol><ol class="c3 lst-kix_8z54o4v75b2r-1 start" start="1"><li class="c0 li-bullet-0"><span class="c1">Yoav - in chromiums impl, fetch is observed, so it can’t be terminated early ??</span></li><li class="c0 li-bullet-0"><span class="c1">Nic - is this a fetch spec or RT spec issue?</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - either in RT or in fetch, we need to say “shouldn’t be observable”</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - but why can’t a fetch be terminated early because of RT?</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - [quotes relevant fetch spec bits]</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - oh, this is a gc thing</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - making RT observable makes gc observable</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav/Ryosuke - we don’t want to do that</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - from the notes, RT shouldn’t be observable thru script</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - explains how one could observe gc thru RT</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - points out that the fetch spec defines “observability” as something thru fetch c’tor/options, this doesn’t apply to RT</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - we need to file issue in fetch</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - this applies to PO and perf timeline</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - does this mean sw can observe the same? Yoav - yes</span></li><li class="c0 li-bullet-0"><span class="c11 c2">Action Item - Ryosuke to open issue on fetch to better clarify what is observable / observing, and to exclude RT and maybe service-workers as well</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - normative text is not what we want here</span></li><li class="c0 li-bullet-0"><span>Yoav - is this a blocker for L2? Ryosuke - no, just a spec bug</span></li></ol><ol class="c3 lst-kix_8z54o4v75b2r-0" start="5"><li class="c8 c9 li-bullet-0"><span class="c7"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/resource-timing/issues/160&amp;sa=D&amp;source=editors&amp;ust=1613255755316000&amp;usg=AOvVaw27kwtuyARZ6RbzUBp0kAtL">https://github.com/w3c/resource-timing/issues/160</a></span><span class="c1">&nbsp;(from Nicolás - @npm1)</span></li></ol><ol class="c3 lst-kix_8z54o4v75b2r-1 start" start="1"><li class="c0 li-bullet-0"><span class="c1">Yoav - this is for h2 connection coalescing</span></li><li class="c0 li-bullet-0"><span class="c1">Nic - so dns-start should be earlier? Yoav - yes, non-zero</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - browser has to know if we resolve to same host, to see if we can coalesce, we aren’t reporting that time</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - this should be blocking L3</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - this is common enough, deserves non-normative text, tests for this would be tough</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - wpt’s have a new server that might make h2 testing possible</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - but dns lookups might not be observable</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - maybe just did dns happen or did it not happen</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - we definitely need more clarification, this could end up as a manual test</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - to do this right, wpt would need to implement a name server</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - dns is measurable when it’s not zero</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - but you can’t run it a second time! Name server might be caching things, is this truly a blocker for getting L2 out?</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - maybe because of the testabiilty issue, we shouldn’t consider this a blocker</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - we need to fix spec language, as a note, try to make it testable</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - there is no easy way to automate this testing Yoav - I agree</span></li><li class="c0 li-bullet-0"><span class="c11 c2">Conclusion - spec change is blocking, test work is not - ACTION ITEM</span></li><li class="c0 li-bullet-0"><span>Yoav - clearing DNS cache is not cross-platform process</span></li></ol><h2 class="c10" id="h.odji8mk5xwgk"><span class="c12">Preload </span></h2><p class="c8"><span class="c1">(Yoav - we have 14 open issues, let’s do them all in 7 minutes! jk)</span></p><p class="c5"><span class="c1"></span></p><ol class="c3 lst-kix_8z54o4v75b2r-0" start="6"><li class="c8 c9 li-bullet-0"><span>Issue 127 - </span><span class="c7"><a class="c6" href="https://www.google.com/url?q=https://github.com/w3c/preload/issues/127&amp;sa=D&amp;source=editors&amp;ust=1613255755317000&amp;usg=AOvVaw01hfeVCgxvYULcJEsccQo8">https://github.com/w3c/preload/issues/127</a></span></li></ol><ol class="c3 lst-kix_8z54o4v75b2r-2 start" start="1"><li class="c0 li-bullet-0"><span class="c1"><b>TLDR</b>: SRI is not read/honored when it comes to preload requests</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - the browser doesn’t keep around buffers that it needs to calculate integrity of resources, this is in chromium impl</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - is this just impl issue?</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav / Ryosuke back and forth about chromium impl.</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - ultimate problem is that a script would be downloaded and parsed, even if it wouldn’t have passed SRI ??</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - chromium folks from Japan said fixing this in (some way) would take months and months, recommendation is to included integrity on the LINK node</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - what if integrity is not specified?</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - then you get the double-download. The script or style will be the second one, because browser can’t know if integrity of preloaded resource is ok</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - double download doesn’t mean it will hit the network twice, http cache</span></li><li class="c0 li-bullet-0"><span class="c1">Yoav - we don’t know what webkit does - Ryosuke - we don’t have this issue in webkit</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - maybe we should allow a MAY, such that they can download again</span></li><li class="c0 li-bullet-0"><span class="c1">Ryosuke - is ok with asking for integrity being specified on the LINK</span></li></ol><p class="c5 c13"><span class="c1"></span></p></div></div><div id="footer"><span>Published by <a target="_blank" title="Learn more about Google Drive" href="https://docs.google.com/">Google Drive</a></span><span class="dash">–</span><a href="https://docs.google.com/u/0/abuse?id=AKkXjozAVg8NNQKm45h_9-PtvQ2mTWLvRFNQED-RVchJM0L0pQwvcnkJa5eUUFn9UdwSa9Tcj8MSif3tWtUfEEo:0">Report Abuse</a></div><script type="text/javascript" nonce="">(function(){/*

 Copyright The Closure Library Authors.
 SPDX-License-Identifier: Apache-2.0
*/
var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};function ba(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var ca=ba(this);
function da(a,b){if(b)a:{var c=ca;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&aa(c,a,{configurable:!0,writable:!0,value:b})}}var ea="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},fa;
if("function"==typeof Object.setPrototypeOf)fa=Object.setPrototypeOf;else{var ha;a:{var ia={a:!0},ja={};try{ja.__proto__=ia;ha=ja.a;break a}catch(a){}ha=!1}fa=ha?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ka=fa;
function h(a,b){a.prototype=ea(b.prototype);a.prototype.constructor=a;if(ka)ka(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.o=b.prototype}da("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});var l=this||self;function la(){}function ma(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}
function na(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}}function oa(a,b){function c(){}c.prototype=b.prototype;a.o=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.B=function(d,e,f){for(var g=Array(arguments.length-2),k=2;k<arguments.length;k++)g[k-2]=arguments[k];return b.prototype[e].apply(d,g)}}function pa(a){return a};var qa=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if("string"===typeof a)return"string"!==typeof b||1!=b.length?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};function ra(a,b,c){for(var d in a)b.call(c,a[d],d,a)};var m;function p(a,b){this.i=a===sa&&b||"";this.j=ta}p.prototype.h=!0;p.prototype.g=function(){return this.i};var ta={},sa={};var ua=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]},va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,Ba=/[\x00&<>"']/;function Ca(a,b){return a<b?-1:a>b?1:0};function q(a,b){this.i=b===r?a:""}q.prototype.h=!0;q.prototype.g=function(){return this.i.toString()};q.prototype.toString=function(){return this.i.toString()};function u(a){return a instanceof q&&a.constructor===q?a.i:"type_error:SafeUrl"}
var Da=/^(?:audio\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-matroska|x-wav|wav|webm)|font\/\w+|image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|video\/(?:mpeg|mp4|ogg|webm|quicktime|x-matroska))(?:;\w+=(?:\w+|"[\w;,= ]+"))*$/i,Ea=/^data:(.*);base64,[a-z0-9+\/]+=*$/i,Fa=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;function Ga(a){if(a instanceof q)return a;a="object"==typeof a&&a.h?a.g():String(a);Fa.test(a)||(a="about:invalid#zClosurez");return new q(a,r)}
var r={},Ha=new q("about:invalid#zClosurez",r);var v;a:{var Ia=l.navigator;if(Ia){var Ja=Ia.userAgent;if(Ja){v=Ja;break a}}v=""}function w(a){return-1!=v.indexOf(a)};function x(a,b,c){this.i=c===Ka?a:""}x.prototype.h=!0;x.prototype.g=function(){return this.i.toString()};x.prototype.toString=function(){return this.i.toString()};var Ka={};function La(a,b,c,d){a=a instanceof q?a:Ga(a);b=b||l;c=c instanceof p?c instanceof p&&c.constructor===p&&c.j===ta?c.i:"type_error:Const":c||"";return void 0!==d?b.open(u(a),c,d,void 0):b.open(u(a),c)};function Ma(a){Ma[" "](a);return a}Ma[" "]=la;function y(a,b,c){return Object.prototype.hasOwnProperty.call(a,b)?a[b]:a[b]=c(b)};var Na=w("Opera"),z=w("Trident")||w("MSIE"),Oa=w("Edge"),Pa=Oa||z,Qa=w("Gecko")&&!(-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"))&&!(w("Trident")||w("MSIE"))&&!w("Edge"),Ra=-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"),Sa=w("Macintosh");function Ta(){var a=l.document;return a?a.documentMode:void 0}var Ua;
a:{var Va="",Wa=function(){var a=v;if(Qa)return/rv:([^\);]+)(\)|;)/.exec(a);if(Oa)return/Edge\/([\d\.]+)/.exec(a);if(z)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Ra)return/WebKit\/(\S+)/.exec(a);if(Na)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Wa&&(Va=Wa?Wa[1]:"");if(z){var Xa=Ta();if(null!=Xa&&Xa>parseFloat(Va)){Ua=String(Xa);break a}}Ua=Va}var Ya=Ua,Za={},$a;if(l.document&&z){var ab=Ta();$a=ab?ab:parseInt(Ya,10)||void 0}else $a=void 0;var bb=$a;function cb(a){return y(a.prototype,"$$generatedClassName",function(){return"Class$obf_"+{valueOf:function(){return++db}}})}var db=1E3;function A(){}A.prototype.u=function(){return this.j||(Object.defineProperties(this,{j:{value:++eb,enumerable:!1}}),this.j)};A.prototype.toString=function(){var a=B(fb(gb(this.constructor)))+"@";var b=(this.u()>>>0).toString(16);return a+B(b)};function D(){}h(D,A);D.prototype.i=function(a){this.h=a;if(a instanceof Object)try{a.A=this}catch(b){}};function hb(a){a.h instanceof Error&&(Error.captureStackTrace?Error.captureStackTrace(a.h):a.h.stack=Error().stack)}D.prototype.toString=function(){var a=fb(gb(this.constructor)),b=this.l;return null==b?a:B(a)+": "+B(b)};function ib(){}h(ib,D);function jb(){}h(jb,ib);var eb=0;function E(){}h(E,jb);E.prototype.i=function(a){jb.prototype.i.call(this,Object.is(this.g,"__noinit__")?a:this.g)};function kb(){}h(kb,E);function lb(a,b){return"string"==typeof a?a.charCodeAt(b):a.g(b)};function B(a){return null==a?"null":a.toString()}function mb(a){return 65536<=a?B(String.fromCharCode((55296+((a-65536|0)>>10&1023)|0)&65535))+B(String.fromCharCode((56320+((a-65536|0)&1023)|0)&65535)):String.fromCharCode(a&65535)}function nb(a,b){var c=b,d=a.length,e;b=lb(a,(e=c,c=c+1|0,e));var f;if(e=55296<=b&&56319>=b&&c<d)a=f=lb(a,c),e=56320<=a&&57343>=a;var g;e?g=65536+((b&1023)<<10)+(f&1023)|0:g=b;return g};function ob(a,b){this.h=a;this.g=b}h(ob,A);function fb(a){var b=cb(a.h);0!=a.g&&(b="L"+B(b)+";");a=a.g;for(var c="",d=0;d<a;d=d+1|0)c=B(c)+"[";return B(c)+B(b)}ob.prototype.toString=function(){return"class "+B(fb(this))};function gb(a){var b=0;return y(a.prototype,"$$class/"+b,function(){return new ob(a,b)})};function pb(a,b){return null==a?a:b?decodeURI(a):decodeURIComponent(a)};var qb=/^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#([\S\s]*))?$/;function rb(a){a=qb.exec(a);for(var b=[],c=0;7>=c;c=c+1|0)a.length<=c||null==a[c]?b.push(null):b.push(a[c]);return b}
function sb(a,b){var c=a.indexOf(mb(35));c=0>c?a.length:c;a:{var d=0;for(var e=b.length;0<(d=a.indexOf(b,d))&&d<c;){var f=nb(a,d-1|0);if(38==f||63==f){if((d+e|0)>=a.length)break a;f=nb(a,d+e|0);if(61==f||38==f||35==f)break a}d=d+(e+1)|0}d=-1}if(0>d)return null;e=a.indexOf(mb(38),d);if(0>e||e>c)e=c;d=d+(b.length+1)|0;b=Math.min(a.length,d);a=a.substr(b,Math.min(a.length,Math.max(d,e))-b|0);c=" ";for(b=0;0<=(b=c.indexOf("\\",b));)36==c.charCodeAt(b+1|0)?(d=B(c.substr(0,b|0))+"$",e=b=b+1|0,c=d+B(c.substr(e))):
(d=B(c.substr(0,b|0)),e=b=b+1|0,c=d+B(c.substr(e)));a=a.replace(/\+/g,c);return pb(a,!1)};function F(a,b){this.h=b;for(var c=[],d=!0,e=a.length-1;0<=e;e--){var f=a[e]|0;d&&f==b||(c[e]=f,d=!1)}this.g=c}var tb={};function ub(a){return-128<=a&&128>a?y(tb,a,function(b){return new F([b|0],0>b?-1:0)}):new F([a|0],0>a?-1:0)}function G(a){if(isNaN(a)||!isFinite(a))return H;if(0>a)return I(G(-a));for(var b=[],c=1,d=0;a>=c;d++)b[d]=a/c|0,c*=4294967296;return new F(b,0)}var H=ub(0),J=ub(1),vb=ub(16777216);
function K(a){if(-1==a.h)return-K(I(a));for(var b=0,c=1,d=0;d<a.g.length;d++){var e=L(a,d);b+=(0<=e?e:4294967296+e)*c;c*=4294967296}return b}F.prototype.toString=function(a){a=a||10;if(2>a||36<a)throw Error("radix out of range: "+a);if(M(this))return"0";if(-1==this.h)return"-"+I(this).toString(a);for(var b=G(Math.pow(a,6)),c=this,d="";;){var e=wb(c,b).g;c=N(c,O(e,b));var f=((0<c.g.length?c.g[0]:c.h)>>>0).toString(a);c=e;if(M(c))return f+d;for(;6>f.length;)f="0"+f;d=f+d}};
function L(a,b){return 0>b?0:b<a.g.length?a.g[b]:a.h}function M(a){if(0!=a.h)return!1;for(var b=0;b<a.g.length;b++)if(0!=a.g[b])return!1;return!0}function P(a,b){a=N(a,b);return-1==a.h?-1:M(a)?0:1}function I(a){for(var b=a.g.length,c=[],d=0;d<b;d++)c[d]=~a.g[d];return(new F(c,~a.h)).add(J)}F.prototype.abs=function(){return-1==this.h?I(this):this};
F.prototype.add=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0,e=0;e<=b;e++){var f=d+(L(this,e)&65535)+(L(a,e)&65535),g=(f>>>16)+(L(this,e)>>>16)+(L(a,e)>>>16);d=g>>>16;f&=65535;g&=65535;c[e]=g<<16|f}return new F(c,c[c.length-1]&-2147483648?-1:0)};function N(a,b){return a.add(I(b))}
function O(a,b){if(M(a)||M(b))return H;if(-1==a.h)return-1==b.h?O(I(a),I(b)):I(O(I(a),b));if(-1==b.h)return I(O(a,I(b)));if(0>P(a,vb)&&0>P(b,vb))return G(K(a)*K(b));for(var c=a.g.length+b.g.length,d=[],e=0;e<2*c;e++)d[e]=0;for(e=0;e<a.g.length;e++)for(var f=0;f<b.g.length;f++){var g=L(a,e)>>>16,k=L(a,e)&65535,t=L(b,f)>>>16,n=L(b,f)&65535;d[2*e+2*f]+=k*n;Q(d,2*e+2*f);d[2*e+2*f+1]+=g*n;Q(d,2*e+2*f+1);d[2*e+2*f+1]+=k*t;Q(d,2*e+2*f+1);d[2*e+2*f+2]+=g*t;Q(d,2*e+2*f+2)}for(e=0;e<c;e++)d[e]=d[2*e+1]<<16|
d[2*e];for(e=c;e<2*c;e++)d[e]=0;return new F(d,0)}function Q(a,b){for(;(a[b]&65535)!=a[b];)a[b+1]+=a[b]>>>16,a[b]&=65535,b++}function S(a,b){this.g=a;this.h=b}
function wb(a,b){if(M(b))throw Error("division by zero");if(M(a))return new S(H,H);if(-1==a.h)return b=wb(I(a),b),new S(I(b.g),I(b.h));if(-1==b.h)return b=wb(a,I(b)),new S(I(b.g),b.h);if(30<a.g.length){if(-1==a.h||-1==b.h)throw Error("slowDivide_ only works with positive integers.");for(var c=J,d=b;0>=P(d,a);)c=xb(c,1),d=xb(d,1);var e=T(c,1),f=T(d,1);d=T(d,2);for(c=T(c,2);!M(d);){var g=f.add(d);0>=P(g,a)&&(e=e.add(c),f=g);d=T(d,1);c=T(c,1)}b=N(a,O(e,b));return new S(e,b)}for(e=H;0<=P(a,b);){c=Math.max(1,
Math.floor(K(a)/K(b)));d=Math.ceil(Math.log(c)/Math.LN2);d=48>=d?1:Math.pow(2,d-48);f=G(c);for(g=O(f,b);-1==g.h||0<P(g,a);)c-=d,f=G(c),g=O(f,b);M(f)&&(f=J);e=e.add(f);a=N(a,g)}return new S(e,a)}F.prototype.and=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)&L(a,d);return new F(c,this.h&a.h)};F.prototype.or=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)|L(a,d);return new F(c,this.h|a.h)};
F.prototype.xor=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)^L(a,d);return new F(c,this.h^a.h)};function xb(a,b){var c=b>>5;b%=32;for(var d=a.g.length+c+(0<b?1:0),e=[],f=0;f<d;f++)e[f]=0<b?L(a,f-c)<<b|L(a,f-c-1)>>>32-b:L(a,f-c);return new F(e,a.h)}function T(a,b){var c=b>>5;b%=32;for(var d=a.g.length-c,e=[],f=0;f<d;f++)e[f]=0<b?L(a,f+c)>>>b|L(a,f+c+1)<<32-b:L(a,f+c);return new F(e,a.h)};N(xb(J,32),J);N(xb(J,128),J);function yb(a){a&&"function"==typeof a.v&&a.v()};function U(){this.h=this.h;this.g=this.g}U.prototype.h=!1;U.prototype.v=function(){this.h||(this.h=!0,this.j())};U.prototype.j=function(){if(this.g)for(;this.g.length;)this.g.shift()()};var zb=!z||9<=Number(bb),Ab=!z||9<=Number(bb),Bb=z&&!y(Za,"9",function(){for(var a=0,b=ua(String(Ya)).split("."),c=ua("9").split("."),d=Math.max(b.length,c.length),e=0;0==a&&e<d;e++){var f=b[e]||"",g=c[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];if(0==f[0].length&&0==g[0].length)break;a=Ca(0==f[1].length?0:parseInt(f[1],10),0==g[1].length?0:parseInt(g[1],10))||Ca(0==f[2].length,0==g[2].length)||Ca(f[2],g[2]);f=f[3];g=g[3]}while(0==a)}return 0<=a}),
Cb=function(){if(!l.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}});try{l.addEventListener("test",la,b),l.removeEventListener("test",la,b)}catch(c){}return a}();function Db(a,b){this.type=a;this.g=this.target=b;this.defaultPrevented=!1}Db.prototype.h=function(){this.defaultPrevented=!0};function V(a,b){Db.call(this,a?a.type:"");this.relatedTarget=this.g=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key="";this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType="";this.i=null;if(a){var c=this.type=a.type,d=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.g=b;if(b=a.relatedTarget){if(Qa){a:{try{Ma(b.nodeName);var e=!0;break a}catch(f){}e=
!1}e||(b=null)}}else"mouseover"==c?b=a.fromElement:"mouseout"==c&&(b=a.toElement);this.relatedTarget=b;d?(this.clientX=void 0!==d.clientX?d.clientX:d.pageX,this.clientY=void 0!==d.clientY?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||0):(this.clientX=void 0!==a.clientX?a.clientX:a.pageX,this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.key=a.key||"";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=
a.shiftKey;this.metaKey=a.metaKey;this.pointerId=a.pointerId||0;this.pointerType="string"===typeof a.pointerType?a.pointerType:Eb[a.pointerType]||"";this.state=a.state;this.i=a;a.defaultPrevented&&V.o.h.call(this)}}oa(V,Db);var Fb=[1,4,2],Eb={2:"touch",3:"pen",4:"mouse"};V.prototype.h=function(){V.o.h.call(this);var a=this.i;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,Bb)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};var Gb="closure_listenable_"+(1E6*Math.random()|0);var Hb=0;function Ib(a,b,c,d,e){this.listener=a;this.g=null;this.src=b;this.type=c;this.capture=!!d;this.h=e;this.key=++Hb;this.m=this.s=!1}function Jb(a){a.m=!0;a.listener=null;a.g=null;a.src=null;a.h=null};function Kb(a){this.src=a;this.g={};this.h=0}Kb.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.g[f];a||(a=this.g[f]=[],this.h++);var g;a:{for(g=0;g<a.length;++g){var k=a[g];if(!k.m&&k.listener==b&&k.capture==!!d&&k.h==e)break a}g=-1}-1<g?(b=a[g],c||(b.s=!1)):(b=new Ib(b,this.src,f,!!d,e),b.s=c,a.push(b));return b};function Lb(a,b){var c=b.type;if(c in a.g){var d=a.g[c],e=qa(d,b),f;(f=0<=e)&&Array.prototype.splice.call(d,e,1);f&&(Jb(b),0==a.g[c].length&&(delete a.g[c],a.h--))}};var Mb="closure_lm_"+(1E6*Math.random()|0),Nb={},Ob=0;function Pb(a,b,c,d,e){if(d&&d.once)return Qb(a,b,c,d,e);if(Array.isArray(b)){for(var f=0;f<b.length;f++)Pb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!1,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!1,d,e)}
function Sb(a,b,c,d,e,f){if(!b)throw Error("Invalid event type");var g=ma(e)?!!e.capture:!!e,k=Tb(a);k||(a[Mb]=k=new Kb(a));c=k.add(b,c,d,g,f);if(c.g)return c;d=Ub();c.g=d;d.src=a;d.listener=c;if(a.addEventListener)Cb||(e=g),void 0===e&&(e=!1),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(Vb(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error("addEventListener and attachEvent are unavailable.");Ob++;return c}
function Ub(){var a=Wb,b=Ab?function(c){return a.call(b.src,b.listener,c)}:function(c){c=a.call(b.src,b.listener,c);if(!c)return c};return b}function Qb(a,b,c,d,e){if(Array.isArray(b)){for(var f=0;f<b.length;f++)Qb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!0,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!0,d,e)}
function Xb(a){if("number"!==typeof a&&a&&!a.m){var b=a.src;if(b&&b[Gb])Lb(b.g,a);else{var c=a.type,d=a.g;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(Vb(c),d):b.addListener&&b.removeListener&&b.removeListener(d);Ob--;(c=Tb(b))?(Lb(c,a),0==c.h&&(c.src=null,b[Mb]=null)):Jb(a)}}}function Vb(a){return a in Nb?Nb[a]:Nb[a]="on"+a}
function Yb(a,b,c,d){var e=!0;if(a=Tb(a))if(b=a.g[b.toString()])for(b=b.concat(),a=0;a<b.length;a++){var f=b[a];f&&f.capture==c&&!f.m&&(f=Zb(f,d),e=e&&!1!==f)}return e}function Zb(a,b){var c=a.listener,d=a.h||a.src;a.s&&Xb(a);return c.call(d,b)}
function Wb(a,b){if(a.m)return!0;if(!Ab){if(!b)a:{b=["window","event"];for(var c=l,d=0;d<b.length;d++)if(c=c[b[d]],null==c){b=null;break a}b=c}d=b;b=new V(d,this);c=!0;if(!(0>d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(g){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.g;e;e=e.parentNode)d.push(e);a=a.type;for(e=d.length-1;0<=e;e--){b.g=d[e];var f=Yb(d[e],a,!0,b);c=c&&f}for(e=0;e<d.length;e++)b.g=d[e],f=Yb(d[e],a,!1,b),c=c&&f}return c}return Zb(a,
new V(b,this))}function Tb(a){a=a[Mb];return a instanceof Kb?a:null}var $b="__closure_events_fn_"+(1E9*Math.random()>>>0);function Rb(a){if("function"===typeof a)return a;a[$b]||(a[$b]=function(b){return a.handleEvent(b)});return a[$b]};function W(a){U.call(this);this.l=a;this.i={}}oa(W,U);var ac=[];function bc(a){ra(a.i,function(b,c){this.i.hasOwnProperty(c)&&Xb(b)},a);a.i={}}W.prototype.j=function(){W.o.j.call(this);bc(this)};W.prototype.handleEvent=function(){throw Error("EventHandler.handleEvent not implemented");};function cc(a){U.call(this);this.i=a||document.body;this.l=new W(this);a=na(yb,this.l);this.h?a():(this.g||(this.g=[]),this.g.push(a));a=this.l;var b=this.i,c=this.u,d="click";Array.isArray(d)||(d&&(ac[0]=d.toString()),d=ac);for(var e=0;e<d.length;e++){var f=Pb(b,d[e],c||a.handleEvent,!1,a.l||a);if(!f)break;a.i[f.key]=f}}h(cc,U);
cc.prototype.u=function(a){if(!(!(zb?0==a.i.button:"click"==a.type||a.i.button&Fb[0])||Sa&&a.ctrlKey||a.defaultPrevented))for(var b=a.target;b&&b!=this.i;){if(b.tagName&&"a"==b.tagName.toLowerCase()){var c=b.getAttribute("href")||b.getAttributeNS("http://www.w3.org/1999/xlink","href"),d=c;try{var e=rb(c)[3];var f;if(f="www.google.com"===pb(e,!0)){var g=rb(c)[5];f="/url"===pb(g,!0)}if(f){var k=sb(c,"q");d=k?k:sb(c,"url")}}catch(C){a:{var t=C;if(null!=t){var n=t.A;if(null!=n){C=n;break a}}if(t instanceof
TypeError){var R=n=new kb;R.l=B(t);hb(R);n.g="__noinit__";n.g=t;n.i(new TypeError(n));t=n}else R=n=new E,R.l=B(t),hb(R),n.g="__noinit__",n.g=t,n.i(Error(n)),t=n;C=t}if(!(C instanceof ib))throw C.h;}d=null!=d?d:"";if(c!=d){e=void 0;b={target:"_blank",noreferrer:!0};c=window;d instanceof q?f=d:(f="undefined"!=typeof d.href?d.href:String(d),f instanceof q||(f="object"==typeof f&&f.h?f.g():String(f),Fa.test(f)?f=new q(f,r):(f=String(f),f=f.replace(/(%0A|%0D)/g,""),f=(g=f.match(Ea))&&Da.test(g[1])?new q(f,
r):null)),f=f||Ha);d=b.target||d.target;g=[];for(e in b)switch(e){case "width":case "height":case "top":case "left":g.push(e+"="+b[e]);break;case "target":case "noopener":case "noreferrer":break;default:g.push(e+"="+(b[e]?1:0))}e=g.join(",");if((w("iPhone")&&!w("iPod")&&!w("iPad")||w("iPad")||w("iPod"))&&c.navigator&&c.navigator.standalone&&d&&"_self"!=d)e="A",g=document,e=String(e),"application/xhtml+xml"===g.contentType&&(e=e.toLowerCase()),g=e=g.createElement(e),f=f instanceof q?f:Ga(f),g.href=
u(f),e.setAttribute("target",d),b.noreferrer&&e.setAttribute("rel","noreferrer"),b=document.createEvent("MouseEvent"),b.initMouseEvent("click",!0,!0,c,1),e.dispatchEvent(b);else if(b.noreferrer){if(c=La("",c,d,e),b=u(f),c){Pa&&-1!=b.indexOf(";")&&(b="'"+b.replace(/'/g,"%27")+"'");c.opener=null;Ba.test(b)&&(-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;")),-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;")),-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;")),-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;")),-1!=b.indexOf("'")&&
(b=b.replace(za,"&#39;")),-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;")));b='<meta name="referrer" content="no-referrer"><meta http-equiv="refresh" content="0; url='+b+'">';if(void 0===m)if(d=null,(e=l.trustedTypes)&&e.createPolicy){try{d=e.createPolicy("goog#html",{createHTML:pa,createScript:pa,createScriptURL:pa})}catch(C){l.console&&l.console.error(C.message)}m=d}else m=d;b=(d=m)?d.createHTML(b):b;b=new x(b,null,Ka);(c=c.document)&&c.write&&(c.write(b instanceof x&&b.constructor===x?b.i:"type_error:SafeHtml"),
c.close())}}else(c=La(f,c,d,e))&&b.noopener&&(c.opener=null);a.h();break}}b=b.parentNode}};function dc(a){new cc(a)}var X=["DOCS_installLinkReferrerSanitizer"],Y=l;X[0]in Y||"undefined"==typeof Y.execScript||Y.execScript("var "+X[0]);for(var Z;X.length&&(Z=X.shift());)X.length||void 0===dc?Y[Z]&&Y[Z]!==Object.prototype[Z]?Y=Y[Z]:Y=Y[Z]={}:Y[Z]=dc;}).call(this);
</script><script type="text/javascript" nonce="">DOCS_installLinkReferrerSanitizer();</script></body></html>